package com.gedi;

import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @Author:RenPu
 * @Date: 2020/2/15 18:59
 * @Version: 1.0
 * @description:
 */
public class OrderMapper extends TableMapper<Text, DoubleWritable> {


    /**
     *
     * @param key 代表hbase中rowkey(主键的值)
     * @param value 代表hbase中的一行 数据
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {

        //1：获取hbase中rowkey的值
        String bytes = Bytes.toString(key.get());

        //2：根据hbase的rowkey的值，通过字符串的分隔(根据数组的下标值)，获取用户的唯一标识ID值
        String userId = bytes.split(":")[0];

        //3：获取商品的具体金额，通过hbase的列簇以及列段名称，定位到单元格的数据
        double money = Bytes.toDouble(value.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("money")));

        //4：通过上文的对象的写方法，将所需的计算数据以流的形式写出
        context.write(new Text(userId),new DoubleWritable(money));


    }
}
